{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Anomaly Detection - DenStream algorithm\n",
    "Example: Code and Results"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 1: Import libraries \n",
    "The algorithm uses:\n",
    "- Pandas \n",
    "- Numpy\n",
    "- Class Sample and DenStream\n",
    "- Statistics and groundTruth useful to compute the Key Performance Indicators (if available)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "#!/usr/bin/env python2\n",
    "# -*- coding: utf-8 -*-\n",
    "\"\"\"\n",
    "Created on Mon Nov 13 17:19:09 2017\n",
    "\n",
    "@author: anr.putina\n",
    "\"\"\"\n",
    "\n",
    "import sys\n",
    "sys.path.append('./../')\n",
    "\n",
    "import time\n",
    "\n",
    "import pandas as pd\n",
    "\n",
    "from sample import Sample\n",
    "from DenStream import DenStream\n",
    "from statistics import Statistics\n",
    "\n",
    "from groundTruth import groundTruth\n",
    "\n",
    "def normalize_matrix(df):\n",
    "    return (df - df.mean())/df.std()\n",
    "\n",
    "%matplotlib inline\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 2: Import Dataset \n",
    "The dataset is composed by the telemetry coming from each node thus it is possible to read and process them in sequence (eg: process telemetry coming from Node1 and save results, process telemetry coming from Node2 and take results etc). In the end the results will be merged and the statistics will be computed.\n",
    "\n",
    "Let's consider first of all a single node (Leaf1) and load the dataset in pandas."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "node = 'leaf1'\n",
    "df = pd.read_csv('Data/'+node+'clear_bgp.csv').dropna()\\\n",
    "    .drop('Unnamed: 0', axis=1)\n",
    "    \n",
    "deleteFeatureList = []\n",
    "for columnName in df.columns:\n",
    "    if 'rate' in columnName:            \n",
    "        deleteFeatureList.append(columnName)\n",
    "    if 'load' in columnName:            \n",
    "        deleteFeatureList.append(columnName)\n",
    "\n",
    "            \n",
    "df = df.drop(deleteFeatureList, axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "The DataFrame df contains now all the telemetry extracted from Leaf1 during the experiment. We can now drop the 'time' column from the dataset and normalize it."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "times = df['time']\n",
    "df = df.drop(['time'], axis=1)\n",
    "dfNormalized = normalize_matrix(df).dropna(axis=1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "By contrusction the first 5 minutes of the experiment are event-free thus we can use the samples to create the first cluster and to compute on it the dynamic parameters (epsilon). Let's divide thus the dataset in two subdatasets called buffer and test. We take the first 40 samples of the experiment as bufferDF."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "sampleSkip = 40\n",
    "bufferDf = dfNormalized[0:sampleSkip]\n",
    "testDf = dfNormalized[sampleSkip:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 3: Run the algorithm\n",
    "We can now initialize the denStream engine and set the parameters. In this case:\n",
    "- The fading factor lambda is set to 0.03\n",
    "- Epsilon is set to 'auto' thus it will be computed dynamically starting from the buffer\n",
    "- The potential factor beta is set to 0.03\n",
    "- Mu is computed automatically from the fading factor. "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "den = DenStream(lamb=0.03, epsilon='auto', beta=0.03, mu='auto', startingBuffer=bufferDf, tp=36)\n",
    "den.runInitialization()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can now extract one by one the rows from the testDF and process them. The algorithm thus will take a decision for each snapshot and will label it with 'Normal' or 'Abnormal' depending if it was able to merge the samples to the core-micro-clusters or not. The algorithm returns True or False (Outlier or not)."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "outputCurrentNode = []\n",
    "for sampleNumber in range(len(testDf)):\n",
    "    sample = testDf.iloc[sampleNumber]\n",
    "    result = den.runOnNewSample(Sample(sample.values, times.iloc[sampleNumber]))\n",
    "    outputCurrentNode.append(result)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "It is possible now to compare the results with the groundtruth and understand how the algorithm performs. For simplicity we add a column to the initial DataFrame. Each event is defined by a StartingTime and an EndingTime: we read them from the groundtruth.\n",
    "In the end the Statistics module computes the number of detections and false alarms with respect to the order K."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'detections': {1: {'delays': [{'delay': 4293.0,\n",
       "     'position': 0,\n",
       "     'type': 'single'},\n",
       "    {'delay': 10922.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 3164.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 8227.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 2099.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 1110.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 896.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 4304.0, 'position': 1, 'type': 'single'}],\n",
       "   'detection': 8,\n",
       "   'events': 8},\n",
       "  2: {'delays': [{'delay': 8583.0, 'position': 0, 'type': 'single'},\n",
       "    {'delay': 15372.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 7784.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 12827.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 6589.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 5430.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 5366.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 8814.0, 'position': 1, 'type': 'single'}],\n",
       "   'detection': 8,\n",
       "   'events': 8},\n",
       "  3: {'delays': [{'delay': 42973.0, 'position': 0, 'type': 'single'},\n",
       "    {'delay': 43484.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 17137.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 11219.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 9810.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 9826.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 40064.0, 'position': 1, 'type': 'single'}],\n",
       "   'detection': 7,\n",
       "   'events': 8},\n",
       "  4: {'delays': [{'delay': 47243.0, 'position': 0, 'type': 'single'},\n",
       "    {'delay': 48054.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 39447.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 37829.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 54550.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 50136.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 44544.0, 'position': 1, 'type': 'single'}],\n",
       "   'detection': 7,\n",
       "   'events': 8},\n",
       "  5: {'delays': [{'delay': 51513.0, 'position': 0, 'type': 'single'},\n",
       "    {'delay': 44077.0, 'position': 2, 'type': 'single'},\n",
       "    {'delay': 157480.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 112756.0, 'position': 1, 'type': 'single'},\n",
       "    {'delay': 49174.0, 'position': 1, 'type': 'single'}],\n",
       "   'detection': 5,\n",
       "   'events': 8}},\n",
       " 'falsePositives': {1: 2, 2: 2, 3: 0, 4: 0, 5: 0}}"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['result'] = [False] * sampleSkip + outputCurrentNode\n",
    "\n",
    "truth = groundTruth()\n",
    "truth.simulationBGP_CLEAR_Second_DATASET()\n",
    "truth.simulationBGP_CLEAR2_CLEAR()\n",
    "\n",
    "statistics = Statistics(node, truth)\n",
    "statistics.getNodeResult(df, times, kMAX=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We can see that for all the orders K the algorithm was able to detect all the 8 events. On the other hand with DOK=1 and DOK=2 the algorithm produces also 2 false positives. For DOK >= 3 the algorithm produces exactly 0 false positives.\n",
    "\n",
    "With these results we can computer Precision, Recall and False Positive Rate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'FalseRate': [0.3333333333333333, 0.3333333333333333, 0.0, 0.0, 0.0],\n",
       " 'Precision': [0.8, 0.8, 1.0, 1.0, 1.0],\n",
       " 'Recall': [1.0, 1.0, 0.875, 0.875, 0.625],\n",
       " 'errFalseRate': [nan, nan, nan, nan, nan],\n",
       " 'errPrecision': [nan, nan, nan, nan, nan],\n",
       " 'errRecall': [nan, nan, nan, nan, nan]}"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x107b15090>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "results = {}\n",
    "results[node] = statistics.getNodeResult(df, times, kMAX=5)\n",
    "statistics.getPrecisionRecallFalseRate(results, kMAX=5, plot=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "As you can see, in this specific case, with these parameters, the algorithm produces exactly 0 false positives for DOK=5. On the other hand there is the need to wait 5 consecutive samples before raising (increasing delay)."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Step 4: Re-Run on all the nodes\n",
    "We can run the algorithm again considering all the nodes and see how the algorithm performs globally."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(array([[  1.07578125,   0.81569318,   6.07477778],\n",
       "        [  2.15015625,   1.98103409,   7.33811111],\n",
       "        [  6.72359375,   6.79685366,   7.07797115],\n",
       "        [  8.34359375,  10.73130469,   9.32785937],\n",
       "        [  9.42046875,  13.67443   ,  12.59073077]]),\n",
       " {'hop0': array([ 0.00604356,  0.00596823,  2.23871425,  2.53619915,  2.53608011]),\n",
       "  'hop1': array([ 0.12726607,  0.15227952,  1.37028105,  1.06407524,  2.92873103]),\n",
       "  'hop2': array([ 3.74481798,  3.73727675,  1.90163689,  2.8956138 ,  5.20373828])})"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x105d7bf50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x105d7bfd0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "nodes = ['leaf1', 'leaf2', 'leaf3', 'leaf5', 'leaf6', 'leaf7', 'leaf8',\\\n",
    "         'spine1', 'spine2', 'spine3', 'spine4']\n",
    "\n",
    "results = {}\n",
    "\n",
    "for node in nodes:\n",
    "\n",
    "    df = pd.read_csv('Data/'+node+'clear_bgp.csv').dropna()\\\n",
    "        .drop('Unnamed: 0', axis=1)\n",
    "\n",
    "    deleteFeatureList = []\n",
    "    \n",
    "    for columnName in df.columns:\n",
    "        if 'rate' in columnName:            \n",
    "            deleteFeatureList.append(columnName)\n",
    "        if 'load' in columnName:            \n",
    "            deleteFeatureList.append(columnName)\n",
    "\n",
    "    df = df.drop(deleteFeatureList, axis=1)\n",
    "\n",
    "    times = df['time']\n",
    "    df = df.drop(['time'], axis=1)\n",
    "\n",
    "    dfNormalized = normalize_matrix(df).dropna(axis=1)\n",
    "\n",
    "    sampleSkip = 40\n",
    "    bufferDf = dfNormalized[0:sampleSkip]\n",
    "    testDf = dfNormalized[sampleSkip:]\n",
    "\n",
    "    den = DenStream(lamb=0.03, epsilon='auto', beta=0.03, mu='auto', startingBuffer=bufferDf, tp=36)\n",
    "    den.runInitialization()\n",
    "\n",
    "    outputCurrentNode = []\n",
    "    for sampleNumber in range(len(testDf)):\n",
    "        sample = testDf.iloc[sampleNumber]\n",
    "        result = den.runOnNewSample(Sample(sample.values, times.iloc[sampleNumber]))\n",
    "        outputCurrentNode.append(result)\n",
    "    ### END SIMULATION ###\n",
    "\n",
    "    df['result'] = [False] * sampleSkip + outputCurrentNode\n",
    "\n",
    "    truth = groundTruth()\n",
    "    truth.simulationBGP_CLEAR_Second_DATASET()\n",
    "    truth.simulationBGP_CLEAR2_CLEAR()\n",
    "\n",
    "    statistics = Statistics(node, truth)\n",
    "    results[node] = statistics.getNodeResult(df, times, kMAX=5)\n",
    "\n",
    "statistics.getPrecisionRecallFalseRate(results, kMAX=5, plot=True)\n",
    "statistics.getDelay(results, kMAX=5, plot=True, samplingRate=4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Results\n",
    "The Dataset in use it is available at https://github.com/cisco-ie/telemetry"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
